# -*- coding: utf-8 -*-
'''
Created on 2014/02/28

@author: deadblue
'''

from cn.twodland.common import oauth
import inspect
import json
import urllib2

def rpc(url):
    '''
    普通JOSN-RPC的装饰器
    '''
    # 获取装饰器中指定的url和形参名称，用于生成调用器
    def create_invoker(func):
        args_spec = inspect.getargspec(func)
        args = args_spec.args
        # 定义调用器函数
        def invoker(*value):
            # 构造http请求参数
            datas = list()
            for i in range(0, len(value)):
                # 跳过self参数...
                if args[i] == 'self': continue
                datas.append("%s=%s" % (args[i], value[i]))
            datas = '&'.join(datas)
            # 发送请求
            req = urllib2.Request(url)
            req.add_data(datas)
            resp = urllib2.urlopen(req)
            print resp.info()
        return invoker
    return create_invoker

def oauth_rpc(url, method):
    '''
    基于OAuth 1.0认证的JSON-RPC装饰器
    '''
    # 获取装饰器中制定的url和形参名称，用于生成调用器
    def create_invoker(func):
        args_spec = inspect.getargspec(func)
        args = args_spec.args
        # 定义调用器函数
        def invoker(*value):
            # 构造http请求参数
            params = list()
            for i in range(0, len(value)):
                # 跳过self参数
                if args[i] == 'self': continue
                # 跳过空值参数
                if value[i] is None: continue
                params.append((args[i], value[i]))
            # 发送请求
            client = oauth.OAuthClient()
            body = client.post(url, params) if method == 'POST' else client.get(url, params)
            return json.loads(body)
        return invoker
    return create_invoker